Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_telephone_initiation.py

Displaying Raw • Download


tests/backend/test_telephone_initiation.py 014e463527af2d3aa5ea4fc10f98d2e705093fbb (014e4635) Text, 3.96 KB

Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMockTb4b4b4, Te6edf3patch

Tff7b72import T7ee787pytest
Tff7b72import T7ee787RNS
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787telephone_manager Tff7b72import Te6edf3TelephoneManager


Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8fftelephone_managerTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3identity Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3specTff7b72=Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4)
Te6edf3config_manager Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3tm Tff7b72= Te6edf3TelephoneManagerTb4b4b4(Te6edf3identityTb4b4b4, Te6edf3config_managerTff7b72=Te6edf3config_managerTb4b4b4)
Te6edf3tmTff7b72.Td2a8fftelephone Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3tmTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffbusy Tff7b72= Tff7b72False
Tff7b72return Te6edf3tm


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_initiation_status_updatesTb4b4b4(Te6edf3telephone_managerTb4b4b4)Tb4b4b4:
Te6edf3statuses Tff7b72= Tb4b4b4[Tb4b4b4]

Tff7b72def Td2a8ffstatus_callbackTb4b4b4(Te6edf3statusTb4b4b4, Te6edf3target_hashTb4b4b4)Tb4b4b4:
Te6edf3statusesTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3statusTb4b4b4, Te6edf3target_hashTb4b4b4)Tb4b4b4)

Te6edf3telephone_managerTff7b72.Td2a8ffon_initiation_status_callback Tff7b72= Te6edf3status_callback
Te6edf3destination_hash Tff7b72= Ta5d6ffbTa5d6ff"Tffea00\x01Ta5d6ff" Tff7b72* T79c0ff32

T8b949e# Mock RNS.Identity.recall to return an identity immediately
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4, Ta5d6ff"Ta5d6ffrecallTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mock_recallTb4b4b4:
Te6edf3mock_identity Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3specTff7b72=Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4)
Te6edf3mock_recallTff7b72.Td2a8ffreturn_value Tff7b72= Te6edf3mock_identity

T8b949e# Mock Transport to avoid Reticulum internal errors
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffrequest_pathTa5d6ff"Tb4b4b4)Tb4b4b4:
T8b949e# Mock asyncio.to_thread to return immediately
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffasyncio.to_threadTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72await Te6edf3telephone_managerTff7b72.Td2a8ffinitiateTb4b4b4(Te6edf3destination_hashTb4b4b4)

T8b949e# Check statuses: Resolving -> Dialing -> None
T8b949e# Filter out None updates at the end for verification if they happen multiple times
Te6edf3final_statuses Tff7b72= Tb4b4b4[Te6edf3sTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3statuses Tff7b72if Te6edf3sTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4]
Tff7b72assert Ta5d6ff"Ta5d6ffResolving identity...Ta5d6ff" Tff7b72in Te6edf3final_statuses
Tff7b72assert Ta5d6ff"Ta5d6ffDialing...Ta5d6ff" Tff7b72in Te6edf3final_statuses

T8b949e# Check that it cleared at the end
Tff7b72assert Te6edf3telephone_managerTff7b72.Td2a8ffinitiation_status Tff7b72is Tff7b72None
Tff7b72assert Te6edf3statusesTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4] Tff7b72== Tb4b4b4(Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_initiation_path_discovery_statusTb4b4b4(Te6edf3telephone_managerTb4b4b4)Tb4b4b4:
Te6edf3statuses Tff7b72= Tb4b4b4[Tb4b4b4]

Tff7b72def Td2a8ffstatus_callbackTb4b4b4(Te6edf3statusTb4b4b4, Te6edf3target_hashTb4b4b4)Tb4b4b4:
Te6edf3statusesTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3statusTb4b4b4, Te6edf3target_hashTb4b4b4)Tb4b4b4)

Te6edf3telephone_managerTff7b72.Td2a8ffon_initiation_status_callback Tff7b72= Te6edf3status_callback
Te6edf3destination_hash Tff7b72= Ta5d6ffbTa5d6ff"Tffea00\x02Ta5d6ff" Tff7b72* T79c0ff32

T8b949e# Mock RNS.Identity.recall to return None first, then an identity
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4, Ta5d6ff"Ta5d6ffrecallTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mock_recallTb4b4b4:
Te6edf3mock_identity Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3specTff7b72=Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4)
Te6edf3mock_recallTff7b72.Td2a8ffside_effect Tff7b72= Tb4b4b4[Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Te6edf3mock_identityTb4b4b4]

Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffhas_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffrequest_pathTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mock_request_pathTb4b4b4:
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffasyncio.to_threadTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e# We need to speed up the sleep in initiate
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffasyncio.sleepTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72await Te6edf3telephone_managerTff7b72.Td2a8ffinitiateTb4b4b4(Te6edf3destination_hashTb4b4b4)

Te6edf3mock_request_pathTff7b72.Td2a8ffassert_called_withTb4b4b4(Te6edf3destination_hashTb4b4b4)

Te6edf3final_statuses Tff7b72= Tb4b4b4[Te6edf3sTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3statuses Tff7b72if Te6edf3sTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4]
Tff7b72assert Ta5d6ff"Ta5d6ffResolving identity...Ta5d6ff" Tff7b72in Te6edf3final_statuses
Tff7b72assert Ta5d6ff"Ta5d6ffDiscovering path/identity...Ta5d6ff" Tff7b72in Te6edf3final_statuses
Tff7b72assert Ta5d6ff"Ta5d6ffDialing...Ta5d6ff" Tff7b72in Te6edf3final_statuses


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_initiation_failure_statusTb4b4b4(Te6edf3telephone_managerTb4b4b4)Tb4b4b4:
Te6edf3statuses Tff7b72= Tb4b4b4[Tb4b4b4]

Tff7b72def Td2a8ffstatus_callbackTb4b4b4(Te6edf3statusTb4b4b4, Te6edf3target_hashTb4b4b4)Tb4b4b4:
Te6edf3statusesTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3statusTb4b4b4, Te6edf3target_hashTb4b4b4)Tb4b4b4)

Te6edf3telephone_managerTff7b72.Td2a8ffon_initiation_status_callback Tff7b72= Te6edf3status_callback
Te6edf3destination_hash Tff7b72= Ta5d6ffbTa5d6ff"Tffea00\x03Ta5d6ff" Tff7b72* T79c0ff32

T8b949e# Mock failure
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4, Ta5d6ff"Ta5d6ffrecallTa5d6ff"Tb4b4b4, Te6edf3side_effectTff7b72=Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6ffTest ErrorTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffasyncio.sleepTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149RuntimeErrorTb4b4b4, Te6edf3matchTff7b72=Ta5d6ff"Ta5d6ffTest ErrorTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72await Te6edf3telephone_managerTff7b72.Td2a8ffinitiateTb4b4b4(Te6edf3destination_hashTb4b4b4)

T8b949e# Should have a failure status
Te6edf3failure_statuses Tff7b72= Tb4b4b4[Te6edf3sTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3statuses Tff7b72if Te6edf3sTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72and Te6edf3sTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffFailed:Ta5d6ff"Tb4b4b4)Tb4b4b4]
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3failure_statusesTb4b4b4) Tff7b72> T79c0ff0
Tff7b72assert Ta5d6ff"Ta5d6ffFailed: Test ErrorTa5d6ff" Tff7b72in Te6edf3failure_statusesTb4b4b4[T79c0ff0Tb4b4b4]

T8b949e# Should still clear at the end
Tff7b72assert Te6edf3telephone_managerTff7b72.Td2a8ffinitiation_status Tff7b72is Tff7b72None


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────